summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCharles Lombardo <clombardo169@gmail.com>2023-03-08 21:38:33 +0100
committerbunnei <bunneidev@gmail.com>2023-06-03 09:05:38 +0200
commit9e8ab499dcaac206cb83d7e64861e54755d30b82 (patch)
treedc30dc3bc35ef5c44306d2395518e428fa90c625
parentandroid: Convert GameDatabase to Kotlin (diff)
downloadyuzu-9e8ab499dcaac206cb83d7e64861e54755d30b82.tar
yuzu-9e8ab499dcaac206cb83d7e64861e54755d30b82.tar.gz
yuzu-9e8ab499dcaac206cb83d7e64861e54755d30b82.tar.bz2
yuzu-9e8ab499dcaac206cb83d7e64861e54755d30b82.tar.lz
yuzu-9e8ab499dcaac206cb83d7e64861e54755d30b82.tar.xz
yuzu-9e8ab499dcaac206cb83d7e64861e54755d30b82.tar.zst
yuzu-9e8ab499dcaac206cb83d7e64861e54755d30b82.zip
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProvider.java138
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProvider.kt127
2 files changed, 127 insertions, 138 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProvider.java b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProvider.java
deleted file mode 100644
index eff4b1e2d..000000000
--- a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProvider.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.yuzu.yuzu_emu.model;
-
-import android.content.ContentProvider;
-import android.content.ContentValues;
-import android.database.Cursor;
-import android.database.sqlite.SQLiteDatabase;
-import android.net.Uri;
-
-import androidx.annotation.NonNull;
-
-import org.yuzu.yuzu_emu.BuildConfig;
-import org.yuzu.yuzu_emu.utils.Log;
-
-/**
- * Provides an interface allowing Activities to interact with the SQLite database.
- * CRUD methods in this class can be called by Activities using getContentResolver().
- */
-public final class GameProvider extends ContentProvider {
- public static final String REFRESH_LIBRARY = "refresh";
- public static final String RESET_LIBRARY = "reset";
-
- public static final String AUTHORITY = "content://" + BuildConfig.APPLICATION_ID + ".provider";
- public static final Uri URI_FOLDER =
- Uri.parse(AUTHORITY + "/" + GameDatabase.TABLE_NAME_FOLDERS + "/");
- public static final Uri URI_REFRESH = Uri.parse(AUTHORITY + "/" + REFRESH_LIBRARY + "/");
- public static final Uri URI_RESET = Uri.parse(AUTHORITY + "/" + RESET_LIBRARY + "/");
-
- public static final String MIME_TYPE_FOLDER = "vnd.android.cursor.item/vnd.dolphin.folder";
- public static final String MIME_TYPE_GAME = "vnd.android.cursor.item/vnd.dolphin.game";
-
-
- private GameDatabase mDbHelper;
-
- @Override
- public boolean onCreate() {
- Log.info("[GameProvider] Creating Content Provider...");
-
- mDbHelper = new GameDatabase(getContext());
-
- return true;
- }
-
- @Override
- public Cursor query(@NonNull Uri uri, String[] projection, String selection,
- String[] selectionArgs, String sortOrder) {
- Log.info("[GameProvider] Querying URI: " + uri);
-
- SQLiteDatabase db = mDbHelper.getReadableDatabase();
-
- String table = uri.getLastPathSegment();
-
- if (table == null) {
- Log.error("[GameProvider] Badly formatted URI: " + uri);
- return null;
- }
-
- Cursor cursor = db.query(table, projection, selection, selectionArgs, null, null, sortOrder);
- cursor.setNotificationUri(getContext().getContentResolver(), uri);
-
- return cursor;
- }
-
- @Override
- public String getType(@NonNull Uri uri) {
- Log.verbose("[GameProvider] Getting MIME type for URI: " + uri);
- String lastSegment = uri.getLastPathSegment();
-
- if (lastSegment == null) {
- Log.error("[GameProvider] Badly formatted URI: " + uri);
- return null;
- }
-
- if (lastSegment.equals(GameDatabase.TABLE_NAME_FOLDERS)) {
- return MIME_TYPE_FOLDER;
- } else if (lastSegment.equals(GameDatabase.TABLE_NAME_GAMES)) {
- return MIME_TYPE_GAME;
- }
-
- Log.error("[GameProvider] Unknown MIME type for URI: " + uri);
- return null;
- }
-
- @Override
- public Uri insert(@NonNull Uri uri, ContentValues values) {
- Log.info("[GameProvider] Inserting row at URI: " + uri);
-
- SQLiteDatabase database = mDbHelper.getWritableDatabase();
- String table = uri.getLastPathSegment();
-
- if (table != null) {
- if (table.equals(RESET_LIBRARY)) {
- mDbHelper.resetDatabase(database);
- return uri;
- }
- if (table.equals(REFRESH_LIBRARY)) {
- Log.info(
- "[GameProvider] URI specified table REFRESH_LIBRARY. No insertion necessary; refreshing library contents...");
- mDbHelper.scanLibrary(database);
- return uri;
- }
-
- long id = database.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_IGNORE);
-
- // If insertion was successful...
- if (id > 0) {
- // If we just added a folder, add its contents to the game list.
- if (table.equals(GameDatabase.TABLE_NAME_FOLDERS)) {
- mDbHelper.scanLibrary(database);
- }
-
- // Notify the UI that its contents should be refreshed.
- getContext().getContentResolver().notifyChange(uri, null);
- uri = Uri.withAppendedPath(uri, Long.toString(id));
- } else {
- Log.error("[GameProvider] Row already exists: " + uri + " id: " + id);
- }
- } else {
- Log.error("[GameProvider] Badly formatted URI: " + uri);
- }
-
- database.close();
-
- return uri;
- }
-
- @Override
- public int delete(@NonNull Uri uri, String selection, String[] selectionArgs) {
- Log.error("[GameProvider] Delete operations unsupported. URI: " + uri);
- return 0;
- }
-
- @Override
- public int update(@NonNull Uri uri, ContentValues values, String selection,
- String[] selectionArgs) {
- Log.error("[GameProvider] Update operations unsupported. URI: " + uri);
- return 0;
- }
-}
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProvider.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProvider.kt
new file mode 100644
index 000000000..c9818172d
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/model/GameProvider.kt
@@ -0,0 +1,127 @@
+package org.yuzu.yuzu_emu.model
+
+import android.content.ContentProvider
+import android.content.ContentValues
+import android.database.Cursor
+import android.database.sqlite.SQLiteDatabase
+import android.net.Uri
+import org.yuzu.yuzu_emu.BuildConfig
+import org.yuzu.yuzu_emu.utils.Log
+
+/**
+ * Provides an interface allowing Activities to interact with the SQLite database.
+ * CRUD methods in this class can be called by Activities using getContentResolver().
+ */
+class GameProvider : ContentProvider() {
+ private var mDbHelper: GameDatabase? = null
+ override fun onCreate(): Boolean {
+ Log.info("[GameProvider] Creating Content Provider...")
+ mDbHelper = GameDatabase(context!!)
+ return true
+ }
+
+ override fun query(
+ uri: Uri,
+ projection: Array<String>?,
+ selection: String?,
+ selectionArgs: Array<String>?,
+ sortOrder: String?
+ ): Cursor? {
+ Log.info("[GameProvider] Querying URI: $uri")
+ val db = mDbHelper!!.readableDatabase
+ val table = uri.lastPathSegment
+ if (table == null) {
+ Log.error("[GameProvider] Badly formatted URI: $uri")
+ return null
+ }
+ val cursor = db.query(table, projection, selection, selectionArgs, null, null, sortOrder)
+ cursor.setNotificationUri(context!!.contentResolver, uri)
+ return cursor
+ }
+
+ override fun getType(uri: Uri): String? {
+ Log.verbose("[GameProvider] Getting MIME type for URI: $uri")
+ val lastSegment = uri.lastPathSegment
+ if (lastSegment == null) {
+ Log.error("[GameProvider] Badly formatted URI: $uri")
+ return null
+ }
+ if (lastSegment == GameDatabase.TABLE_NAME_FOLDERS) {
+ return MIME_TYPE_FOLDER
+ } else if (lastSegment == GameDatabase.TABLE_NAME_GAMES) {
+ return MIME_TYPE_GAME
+ }
+ Log.error("[GameProvider] Unknown MIME type for URI: $uri")
+ return null
+ }
+
+ override fun insert(uri: Uri, values: ContentValues?): Uri {
+ var realUri = uri
+ Log.info("[GameProvider] Inserting row at URI: $realUri")
+ val database = mDbHelper!!.writableDatabase
+ val table = realUri.lastPathSegment
+ if (table != null) {
+ if (table == RESET_LIBRARY) {
+ mDbHelper!!.resetDatabase(database)
+ return realUri
+ }
+ if (table == REFRESH_LIBRARY) {
+ Log.info(
+ "[GameProvider] URI specified table REFRESH_LIBRARY. No insertion necessary; refreshing library contents..."
+ )
+ mDbHelper!!.scanLibrary(database)
+ return realUri
+ }
+ val id =
+ database.insertWithOnConflict(table, null, values, SQLiteDatabase.CONFLICT_IGNORE)
+
+ // If insertion was successful...
+ if (id > 0) {
+ // If we just added a folder, add its contents to the game list.
+ if (table == GameDatabase.TABLE_NAME_FOLDERS) {
+ mDbHelper!!.scanLibrary(database)
+ }
+
+ // Notify the UI that its contents should be refreshed.
+ context!!.contentResolver.notifyChange(realUri, null)
+ realUri = Uri.withAppendedPath(realUri, id.toString())
+ } else {
+ Log.error("[GameProvider] Row already exists: $realUri id: $id")
+ }
+ } else {
+ Log.error("[GameProvider] Badly formatted URI: $realUri")
+ }
+ database.close()
+ return realUri
+ }
+
+ override fun delete(uri: Uri, selection: String?, selectionArgs: Array<String>?): Int {
+ Log.error("[GameProvider] Delete operations unsupported. URI: $uri")
+ return 0
+ }
+
+ override fun update(
+ uri: Uri, values: ContentValues?, selection: String?,
+ selectionArgs: Array<String>?
+ ): Int {
+ Log.error("[GameProvider] Update operations unsupported. URI: $uri")
+ return 0
+ }
+
+ companion object {
+ const val REFRESH_LIBRARY = "refresh"
+ const val RESET_LIBRARY = "reset"
+ private const val AUTHORITY = "content://${BuildConfig.APPLICATION_ID}.provider"
+
+ @JvmField
+ val URI_FOLDER: Uri = Uri.parse("$AUTHORITY/${GameDatabase.TABLE_NAME_FOLDERS}/")
+
+ @JvmField
+ val URI_REFRESH: Uri = Uri.parse("$AUTHORITY/$REFRESH_LIBRARY/")
+
+ @JvmField
+ val URI_RESET: Uri = Uri.parse("$AUTHORITY/$RESET_LIBRARY/")
+ const val MIME_TYPE_FOLDER = "vnd.android.cursor.item/vnd.yuzu.folder"
+ const val MIME_TYPE_GAME = "vnd.android.cursor.item/vnd.yuzu.game"
+ }
+}